/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.data.crud;

import br.data.model.Cidades;
import br.data.model.Clientes;
import br.data.model.Estados;
import java.sql.Date;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author thiago
 */
public class CrudClientes {

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("wabtPU");

    public void persist(Object object) {
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }

    }

    public Collection<br.data.model.Clientes> getAll() {
        emf.getCache().evictAll();
        EntityManager em = emf.createEntityManager();
        try {
            return em.createNamedQuery("Clientes.findAll").getResultList();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
            return null;
        } finally {
            em.close();
        }
    }

    public br.data.model.Clientes getCliente(String login) {

        EntityManager em = emf.createEntityManager();
        try {
            return (br.data.model.Clientes) em.createNamedQuery("Clientes.findByLogin").setParameter("login", login).getSingleResult();
        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }

    public void update(Clientes object) {

        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();

            em.merge(object);

            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public int getNovoCodigo() {
        EntityManager em = emf.createEntityManager();
        try {
            int max = Integer.parseInt(em.createQuery("SELECT MAX(c.codigocli) FROM Clientes c").getResultList().get(0).toString());
            return (max + 1);
        } catch (Exception e) {
            return 0;
        } finally {
            em.close();
        }
    }

    public br.data.model.Clientes getCliente(int codigo) {
        emf.getCache().evictAll();
        EntityManager em = emf.createEntityManager();
        try {
            return em.find(br.data.model.Clientes.class, codigo);
        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }

    public br.data.model.Clientes getCliente(String login, String senha) {

        EntityManager em = emf.createEntityManager();
        try {
            return (br.data.model.Clientes) em.createQuery("SELECT c FROM Clientes c WHERE c.login = :login AND c.senha = :senha").setParameter("login", login).setParameter("senha", senha).getSingleResult();
        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }

    public void remove(int codigo) {
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();

            br.data.model.Clientes cli;
            cli = em.find(br.data.model.Clientes.class, codigo);
            em.remove(cli);

            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public void update(Integer codigocli, Date datapagamento, Date datacadastro, Boolean status, Double valormensalidade, String razaosocial, String fantasia, String cnpj, String inscestadual, String telefone, String rua, String complemento, String bairro, String logradouro, String cep, Integer numero, String login, String senha, Estados est, Cidades cid) {

        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();

            br.data.model.Clientes cli;
            cli = em.find(br.data.model.Clientes.class, codigocli);

            cli.setCodigocli(codigocli);
            cli.setBairro(bairro);
            cli.setCep(cep);
            cli.setCnpj(cnpj);
            cli.setCodigocid(cid);
            cli.setCodigoest(est);
            cli.setComplemento(complemento);
            cli.setDatacadastro(datacadastro);
            cli.setDatapagamento(datapagamento);
            cli.setFantasia(fantasia);
            cli.setInscestadual(inscestadual);
            cli.setLogin(login);
            cli.setSenha(senha);
            cli.setLogradouro(logradouro);
            cli.setNumero(numero);
            cli.setRazaosocial(razaosocial);
            cli.setRua(rua);
            cli.setStatus(status);
            cli.setTelefone(telefone);
            cli.setValormensalidade(valormensalidade);

            em.merge(cli);

            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }
}
